#include "pagetwo.h"
#include "ui_pagetwo.h"

pagetwo::pagetwo(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::pagetwo),
    timeCounter(0),
    maxTempThreshold(30),  // 默认最高阈值30°C（对应pageone的默认值）
    minTempThreshold(15)   // 默认最低阈值10°C（合理初始值）
{
    ui->setupUi(this);
    tempSeries = new QLineSeries();
    tempSeries->setName("温度 (°C)");  // 系列名称（用于图例）

    // 2. 创建图表并添加数据序列
    chart = new QChart();
    chart->addSeries(tempSeries);
    chart->setTitle("温度变化折线图");  // 图表标题
    chart->legend()->setVisible(true);  // 显示图例

    // 3. 配置X轴（时间轴，单位：秒）
    axisX = new QValueAxis();
    axisX->setTitleText("时间 (s)");    // X轴标题
    axisX->setRange(0, 30);    // 初始显示0-30秒的数据
    axisX->setTickCount(10);
    chart->addAxis(axisX, Qt::AlignBottom);  // X轴在底部
    tempSeries->attachAxis(axisX);      // 将数据序列关联到X轴

    // 4. 配置Y轴（温度轴，适合室内温度）
    axisY = new QValueAxis();
    axisY->setTitleText("温度 (°C)");   // Y轴标题
    axisY->setRange(10, 40);           // 温度范围

    axisY->setTickCount(10);            // 刻度数量
    chart->addAxis(axisY, Qt::AlignLeft);   // Y轴在左侧
    tempSeries->attachAxis(axisY);      // 将数据序列关联到Y轴

    // 5. 创建图表视图（用于显示图表）
    QChartView *chartView = new QChartView(chart, this);
    chartView->setRenderHint(QPainter::Antialiasing);  // 抗锯齿，使图表更清晰
    chartView->setGeometry(200, 0, 600, 400);  // 设置图表位置和大小（x,y,w,h）

    // 6. 初始化定时器（现在不需要自动更新，仅用于接收真实数据）
    dataTimer = new QTimer(this);
    // 不再连接定时器到任何函数，因为不再需要自动生成数据
    onTempThresholdReceived(maxTempThreshold, minTempThreshold);
}

pagetwo::~pagetwo()
{
    delete ui;
    delete tempSeries;
    delete chart;
    delete axisX;
    delete axisY;
    delete dataTimer;
}

void pagetwo::onTemperatureReceived(double temp)
{
    // 添加新数据点（时间，温度）
    tempSeries->append(timeCounter, temp);

    // 当数据点超过30个时，X轴范围右移
    if (timeCounter > 30) {
        axisX->setRange(timeCounter - 30, timeCounter);
    }

    timeCounter++;  // 时间递增
}

void pagetwo::onTempThresholdReceived(int maxTemp, int minTemp)
{
    maxTempThreshold = maxTemp;
    minTempThreshold = minTemp;

    // 示例：在图表中添加阈值参考线（如果需要可视化阈值）
    // 1. 清除之前的阈值线（如果有）
    QList<QAbstractSeries*> seriesList = chart->series();
    for (QAbstractSeries* series : qAsConst(seriesList)) {
        if (series->name() == "最高温度阈值" || series->name() == "最低温度阈值") {
            chart->removeSeries(series);
            delete series;
        }
    }

    // 2. 添加最高温度阈值线
    QLineSeries *maxLine = new QLineSeries();
    maxLine->setName("最高温度阈值");
    maxLine->append(axisX->min(), maxTemp);
    maxLine->append(axisX->max(), maxTemp);
    maxLine->setColor(Qt::red); // 红色标记最高阈值
    chart->addSeries(maxLine);
    maxLine->attachAxis(axisX);
    maxLine->attachAxis(axisY);

    // 3. 添加最低温度阈值线
    QLineSeries *minLine = new QLineSeries();
    minLine->setName("最低温度阈值");
    minLine->append(axisX->min(), minTemp);
    minLine->append(axisX->max(), minTemp);
    minLine->setColor(Qt::blue); // 蓝色标记最低阈值
    chart->addSeries(minLine);
    minLine->attachAxis(axisX);
    minLine->attachAxis(axisY);
}


